﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text;
using System.IO;
using DataLayer.dbml;
using DataLayer.Controller;
using obout_ASPTreeView_2_NET;
using OboutInc.Flyout2;


public partial class services_ViewServices : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {                
        this.configExport();
        this.Grid1.SelectedRecords = null;        
        if (!IsPostBack)
        {
            //this.hdnNIT.Value = "900092385-00";
            //this.hdnIdCuenta.Value = "001T000000qwUNWIA2";
            //loadTree("900092385-00");
            

            if (Request.QueryString["NIT"] != null)
            {
                this.hdnNIT.Value = Request.QueryString["NIT"].ToString();

                //Trae el idCuenta del nit
                CUENTA cta = AccountController.GetCuentaByNit(this.hdnNIT.Value);
                this.hdnIdCuenta.Value = cta.ID_CUENTASFDC;
                this.hdnTipoCliente.Value = cta.TIPO_CLIENTE;
                

                //Si el cliente es residencial, directo o final no se muestra el arbol
                if (!((this.hdnTipoCliente.Value.Equals("Clientes residenciales")) || (this.hdnTipoCliente.Value.Equals("Clientes Directos")) || (this.hdnTipoCliente.Value.Equals("Clientes finales"))))
                    loadTree(Request.QueryString["NIT"].ToString());
                else
                    loadGrid();
            }
        }
        else
        { 
            //Se genero el postback desde el treeview o se esta paginando
            this.loadGrid();
            if (this.hdnPostBackTree.Value.ToString().Equals("1"))                
                this.hdnPostBackTree.Value = "0";

            this.txtSearch.Text = string.Empty;
            this.txtSearchVisible.Text = string.Empty;
        }
        this.PerfilarMenuContextual();
    }

    /// <summary>
    /// Elimina del menu contextual los ítems que no puede ver el usuario de acuerdo al perfil al que pertenece
    /// </summary>
    private void PerfilarMenuContextual()
    {
        CUENTA cta = AccountController.GetCuentaByNit(this.hdnNIT.Value.ToString());
        if (cta == null)
            return;

        switch (cta.TIPO_CLIENTE)
        { 
            case "Clientes corporativos y alianzas":
                //this.EasyMenu1.RemoveItemByID("itemCrearCaso");
                //this.EasyMenu1.RemoveItemByID("itemConsultarCaso");
                //this.EasyMenu1.RemoveItemByID("itemTituloCasos");
                break;
            case "Clientes Directos":
                break;
            case "Clientes Internacionales":
                break;
            case "Clientes residenciales":
                break;

        }
    }
    

    /// <summary>
    /// carga el arbol
    /// </summary>
    private void loadTree(string nit)
    {
        obout_ASPTreeView_2_NET.Tree oTree;
        string paramSearch = string.Empty;
        string attachTo = string.Empty;

        if (Session["ARBOL"] == null)
        {
            oTree = new obout_ASPTreeView_2_NET.Tree();
            oTree.FolderIcons = "../style/tree2/icons";
            oTree.FolderScript = "../style/tree2/script";
            oTree.FolderStyle = "../style/tree2/style/Classic";
            oTree.ShowRootIcon = true;
            oTree.ShowRootPlusMinus = true;
            oTree.AddRootNode("<div onmouseover=\"CursorMano(this); \">Todos</div>", true, "folderOpen16.jpg");
            oTree.EventList = "OnNodeSelect";

            //Trae el idCuenta del nit        
            string idCuenta = this.hdnIdCuenta.Value.ToString();

            //List<CLIENTE_FINAL> listClient = FinalClientController.GetAllByCuenta(nit, paramSearch);
            DataTable dt = ServicesController.GetArbolServicios(nit, idCuenta);

            tblError.Visible = false;
            //if (listClient.Count() <= 0)
            //{
            //      tblError.Visible = true;
            //      return;
            //}  
            if (dt.Rows.Count <= 0)
            {
                tblError.Visible = true;
                return;
            }

            string idProyecto = "";
            string idClienteFinal = "";
            foreach (DataRow dr in dt.Rows)
            {
                //Si cambia el idClienteFinal se agrega al árbol
                if (idClienteFinal != dr["idClienteFinal"].ToString())
                {
                    oTree.Add("root", "0" + dr["idClienteFinal"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["clienteFinal"].ToString() + "</div>", true, "folderOpen16.jpg");
                    attachTo += "0" + dr["idClienteFinal"].ToString() + ",";
                }

                //Si cambia el idProyecto se agrega al árbol
                if (idProyecto != dr["idProyecto"].ToString())
                {
                    oTree.Add("0" + dr["idClienteFinal"].ToString(), "1" + dr["idProyecto"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["proyecto"].ToString() + "</div>", true, "folderOpen16.jpg");
                    attachTo += "1" + dr["idProyecto"].ToString() + ",";
                }

                //Se agrega el servicio
                //oTree.Add("1" + dr["idProyecto"].ToString(), "2" + dr["idServicio"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["servicio"].ToString() + "</div>", true, "Services21.jpg");

                idClienteFinal = dr["idClienteFinal"].ToString();
                idProyecto = dr["idProyecto"].ToString();
            }

            Session["ARBOL"] = oTree;
        }
        else
        {
            oTree = (obout_ASPTreeView_2_NET.Tree)Session["ARBOL"];
        }


        /*
        foreach (CLIENTE_FINAL cf in listClient)
        {
            oTree.Add("root", "0" + cf.ID_CLIENTEFINALSDFC, "<div onmouseover=\"CursorMano(this); \">" + cf.NOMBRE_CLIENTEFINAL + "</div>", true, "folderOpen16.jpg");
            attachTo += "0" + cf.ID_CLIENTEFINALSDFC + ","; 

            paramSearch = string.Empty;
            
            List<PROYECTO> listpt = ProjectController.GetAllByFinalClient(cf.ID_CLIENTEFINALSDFC, paramSearch, idCuenta);            

            foreach (PROYECTO pt in listpt)
            {
                oTree.Add("0" + cf.ID_CLIENTEFINALSDFC, "1" + pt.ID_PROYECTOSFDC, "<div onmouseover=\"CursorMano(this); \">" + pt.NOMBRE_PROYECTO + "</div>", true, "folderOpen16.jpg");
                attachTo += "1" + pt.ID_PROYECTOSFDC + ",";

                paramSearch = string.Empty;

                //if (ddlTypeSearch.SelectedValue == "3")
                //    paramSearch = txtSearch.Text;

                List<SERVICIO> listSvcs = ServicesController.GetAllByProject(pt.ID_PROYECTOSFDC, paramSearch, idCuenta);
                foreach (SERVICIO svc in listSvcs)
                {
                    oTree.Add("1" + pt.ID_PROYECTOSFDC, "2" + svc.ID_SERVICIOSDFC, "<div onmouseover=\"CursorMano(this); \">" + svc.NOMBRE_SERVICIO + "</div>", true, "Services21.jpg");
                }
            }
        }
         * */

        this.trvClient.Text = oTree.HTML();
        

        if (attachTo.Length > 0)
            attachTo = attachTo.Substring(0, attachTo.Length - 1);

        Flyout2.AttachTo = attachTo;        
        Flyout2.OpenEvent = OpenEvents.ONRIGHTCLICK;
        Flyout2.Position = PositionStyle.MIDDLE_RIGHT;                

    }

    /// <summary>
    /// Configura las opciones que se utilizaran para exportar la grilla
    /// </summary>
    private void configExport()
    {
        this.Grid1.ExportingSettings.AppendTimeStamp = false;
        this.Grid1.ExportingSettings.ExportAllPages = true;
        this.Grid1.ExportingSettings.ExportHiddenColumns = true;
        this.Grid1.ExportingSettings.FileName = "Servicios";
        this.Grid1.ExportingSettings.KeepColumnSettings = false;
        this.Grid1.ExportingSettings.ExportTemplates = true;        
        
        //this.Grid1.ExportingSettings.ColumnsToExport = null;
        this.Grid1.ExportingSettings.ColumnsToExport = "nombre_servicio,numero_cpa,velocidad,tecnologia,fecha_activacion2,estado_servicio,localizacion";
    }

    private void loadGrid()
    {
        this.Grid1.DataSource = null;
        this.Grid1.DataBind();

        //Si el cliente es residencial, directo o final se le muestran de una vez todos los servicios
        if (this.hdnTipoCliente.Value.Equals("Clientes residenciales") || this.hdnTipoCliente.Value.Equals("Clientes Directos") || this.hdnTipoCliente.Value.Equals("Clientes finales"))
            this.hdnNodoSeleccionado.Value = "root_tree1";
        

        if ((this.hdnNodoSeleccionado.Value.ToString().Length > 0) || (this.hdnRightClickSeleccionado.Value.ToString().Length > 0) || (this.txtSearchVisible.Text.Trim().Length > 0))
        {
            string paramSearch = this.txtSearch.Text.Trim();
            paramSearch = paramSearch.Replace(",", "");

            if (paramSearch.Length == 0)
            {
                paramSearch = this.txtSearchVisible.Text.Trim();
                paramSearch = paramSearch.Replace(",", "");            
            }

            //Se obtiene el nivel del nodo seleccionado, que esta en el id
            int nivelNodo = -1;
            string idNodo = string.Empty;            
            if (this.hdnNodoSeleccionado.Value.ToString().Length > 0)
            {
                //Si es el nodo raíz
                if (this.hdnNodoSeleccionado.Value.ToString().Equals("root_tree1"))
                {
                    nivelNodo = -1;
                    idNodo = "0";
                }
                else
                {
                    nivelNodo = Convert.ToInt32(this.hdnNodoSeleccionado.Value.ToString().Substring(0, 1));
                    idNodo = this.hdnNodoSeleccionado.Value.ToString().Substring(1);                            
                }
            }
            else if (this.hdnRightClickSeleccionado.Value.ToString().Length > 0)
            {
                nivelNodo = Convert.ToInt32(this.hdnRightClickSeleccionado.Value.ToString().Substring(0, 1));
                idNodo = this.hdnRightClickSeleccionado.Value.ToString().Substring(1);                
            }


            //Se determina si se busca por cliente, proyecto o servicio, dependiendo del nodo seleccionado
            DataLayer.Utilities.PropertiesApp.Jerarquia jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Cliente;
            if (nivelNodo == 2)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Servicio;
            else if (nivelNodo == 1)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Proyecto;
            else if (nivelNodo == 0)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Cliente;
            else if (nivelNodo == -1)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Todos;

            //Se determina el tipo de cliente
            ServicesController.TipoCliente tipoCliente = ServicesController.GetTipoClienteFromString(this.hdnTipoCliente.Value);            

            DataTable dttDetail = ServicesController.GetServiceDetail(idNodo, jerarquia, paramSearch, this.hdnIdCuenta.Value, tipoCliente);

            //Da formato a columnas de fechas
            for (int i = 0; i < dttDetail.Rows.Count; i++)
            {
                dttDetail.Rows[i]["fecha_activacion2"] = this.FormatearFecha(dttDetail.Rows[i]["fecha_activacion"].ToString());
            }

            //Agrega columna para mostrar los detalles
            dttDetail.Columns.Add("Detalle");

            this.Grid1.DataSource = dttDetail;
            this.Grid1.DataBind();            

            //Se guarda en session la tabla de los resultados, para poder filtrar
            Session["VIEWSERVICES"] = dttDetail;

            this.hdnNodoSeleccionado.Value = "";
            this.hdnRightClickSeleccionado.Value = "";
        }
    }

    protected void grvServicios_RowDataBound(object sender, Obout.Grid.GridRowEventArgs e)
    {
        if (e.Row.RowType == Obout.Grid.GridRowType.DataRow)
        {
            HyperLink lnkDetalle = (HyperLink)e.Row.Cells[8].Controls[0].Controls[0].Controls[0].Controls[0].Controls[1];            
            //lnkDetalle.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/homeCliente/DetalleServicio.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "idServicioSF").ToString().Trim() + "&nit=" + this.hdnNIT.Value + "','iframe','Detalle del servicio',1100,750);";
            lnkDetalle.NavigateUrl = ConfigurationManager.AppSettings["urlPortal"] + "/homeCliente/DetalleServicio.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "idServicioSF").ToString().Trim() + "&nit=" + this.hdnNIT.Value;

            //HyperLink lnkDetalle = new HyperLink();
            //lnkDetalle.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/homeCliente/DetalleServicio.aspx?id=" + DataBinder.Eval(e.Row.DataItem, "idServicioSF").ToString().Trim() + "&nit=" + this.hdnNIT.Value + "','iframe','Detalle del servicio',1100,750);";
            //lnkDetalle.ImageUrl = "../images/document.jpg";
            //e.Row.Cells[e.Row.Cells.Count].Controls.Add(lnkDetalle);            

           /* Image imgStatus = (Image)e.Row.FindControl("imgStatus");

            imgStatus.ImageUrl = "../images/statusPending.jpg";
            if (DataBinder.Eval(e.Row.DataItem, "estado_servicio").ToString() == "Cancelado")
                imgStatus.ImageUrl = "../images/statusCancel.jpg";*/
            
        }
    }
    
    protected void btnSearch_Click(object sender, ImageClickEventArgs e)
    {        
        //Se hizo busqueda con el click derecho sobre el arbol, se tiene en cuenta solamente el nodo sobre
        //el que se dio click derecho
        this.hdnNodoSeleccionado.Value = "";
        //No se de donde aparecen estas comas en el textbox
        this.txtSearch.Text = this.txtSearch.Text.Replace(",", "");

        //this.loadGrid();
        txtSearch.Text = string.Empty;
        this.hdnRightClickSeleccionado.Value = "";
    }

    protected void btnSearchVisible_Click(object sender, ImageClickEventArgs e)
    {
        //Se hizo busqueda con el click derecho sobre el arbol, se tiene en cuenta solamente el nodo sobre
        //el que se dio click derecho
        this.hdnNodoSeleccionado.Value = "";
        //No se de donde aparecen estas comas en el textbox
        this.txtSearch.Text = this.txtSearch.Text.Replace(",", "");
        this.txtSearchVisible.Text = this.txtSearchVisible.Text.Replace(",", "");

        //this.loadGrid();
        txtSearch.Text = string.Empty;
        txtSearchVisible.Text = string.Empty;
        this.hdnRightClickSeleccionado.Value = "";
    }


    private string FormatearFecha(string cadena)
    {
        if (cadena.Contains("1753"))
            return "";
        else
        {
            if (cadena.Length >= 10)
                return cadena.Substring(0, 10);
            else
                return "";
        }

    }



    #region "Filtros de la grilla"

    protected void btnBuscarGrilla_Click(object sender, ImageClickEventArgs e)
    {
        if (string.IsNullOrEmpty(this.txtContiene.Text.Trim()))
            return;

        if (Session["VIEWSERVICES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWSERVICES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();
            
            DataView dw = dtt.DefaultView;
            dw.RowFilter = columna + " LIKE '%" + this.txtContiene.Text.Trim() + "%'";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWSERVICES"] = dtt;

            this.txtContiene.Text = string.Empty;
        }
    }

    protected void lnkAscendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWSERVICES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWSERVICES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " ASC";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWSERVICES"] = dtt;
        }
    }

    protected void lnkDescendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWSERVICES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWSERVICES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " DESC";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWSERVICES"] = dtt;
        }
    }

    protected void lnkSinFiltro_Click(object sender, EventArgs e)
    {
        this.loadGrid();
    }

    #endregion



    //protected void Button1_Click(object sender, EventArgs e)
    //{
    //    StringBuilder sb = new StringBuilder();
    //    StringWriter sw = new StringWriter(sb);
    //    HtmlTextWriter htw = new HtmlTextWriter(sw);
    //    Page pagina = new Page();
    //    HtmlForm form = new HtmlForm();

    //    //pagina.Controls.Add(form);
    //    //form.Controls.Add(this.Grid1);
    //    //pagina.RenderControl(htw);

    //    DataTable dtt = (DataTable)Session["VIEWSERVICES"];
    //    sb.Append("<table>");

    //    //Titulos de las columnas
    //    sb.Append("<tr>");
    //    for (int j = 0; j < dtt.Columns.Count; j++)
    //    { 
    //        sb.Append("<td align='center'><strong>" + dtt.Columns[j].ColumnName + "</strong></td>");
    //    }
    //    sb.Append("</tr>");                


    //    for (int i = 0; i < dtt.Rows.Count; i++)
    //    {
    //        sb.Append("<tr>");
    //        for (int j = 0; j < dtt.Columns.Count; j++)
    //        {
    //            sb.Append("<td>" + dtt.Rows[i][j].ToString() + "</td>");
    //        }
    //        sb.Append("</tr>");                
    //    }
    //    sb.Append("</table>");
        

    //    Response.Clear();
    //    Response.Buffer = true;
    //    Response.ContentType = "application/vnd.ms-excel";
    //    Response.AddHeader("Content-Disposition", "attachment;filename=Servicios.xls");
    //    Response.Charset = "UTF-8";

    //    Response.ContentEncoding = Encoding.Default;
    //    Response.Write(sb.ToString());
    //    Response.End();

    //}
}
